const CompressionPlugin = require('compression-webpack-plugin')
const path = require('path')
function resolve(dir) {
    return path.join(__dirname, dir)
}
module.exports = {
    publicPath: './', // 基本路径
    productionSourceMap: false, //可以使得打包过后的文件不包含未压缩的.map文件，减少压缩后代码体积
    
    
    chainWebpack: config => {
        // 移除 prefetch 插件
        config.plugins.delete("prefetch");
        // 移除 preload 插件
        config.plugins.delete('preload');
        // 压缩代码
        config.optimization.minimize(true);
        // 分割代码
        config.optimization.splitChunks({
            chunks: 'all'
        });

        // set svg-sprite-loader
        config.module
            .rule('svg')
            .exclude.add(resolve('src/icons'))
            .end()
        config.module
            .rule('icons')
            .test(/\.svg$/)
            .include.add(resolve('src/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'icon-[name]'
            })
            .end()
        /* 添加分析工具*/
        if (process.env.NODE_ENV === 'production') {
            if (process.env.npm_config_report) {
                config
                    .plugin('webpack-bundle-analyzer')
                    .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
                    .end();
                config.plugins.delete('prefetch')
            }
        }
    },
    configureWebpack: (config) => {
        config.mode = 'production'
        return {
            //cdn引入
            externals: {
                'vue': 'Vue',
                "element": "ELEMENT",
                lodash : {
                    commonjs: "lodash",
                    amd: "lodash",
                    root: "_" // indicates global variable
                  }
            },
            //gzip压缩  本地测试就别开了，调试编译变慢了
            //  plugins: [new CompressionPlugin({
            //     test: /\.js$|\.html$|\.css/, //匹配文件名
            //     threshold: 10240, //对超过10k的数据进行压缩
            //     deleteOriginalAssets: false //是否删除原文件
            // })],
            resolve: {
                alias: {
                    'vue$': 'vue/dist/vue.esm.js',
                    '@': resolve('/src'),
                },
            },
        }
    }
}